

export default {
  
  namespaced: true,
  
  state: () => ({
    // 存储数据
    cart: JSON.parse( uni.getStorageSync('cart') || '[]' )
  }),
  //修改state的方法
  mutations: {
    // 加入购物车数据
    addToCart(state, goods){
      // 查找这个商品是否已经加入购物车
      // console.log(JSON.stringify(state.cart))
      const result = state.cart.find(item => item.goods_id === goods.goods_id)
      if(result){
        result.goods_count = result.goods_count + 1
      }else{
        state.cart.push(goods)
      }
      // 保存到本地
      this.commit('m_cart/saveToStorage')
      // console.log(JSON.stringify(state.cart))
    },
    // 更新购物车选中状态
    updateGoodsState(state, goods) {
      // 查找对应商品，并更新商品选中状态
      const result = state.cart.find(item => item.goods_id === goods.goods_id)
      if(result){
        result.goods_state = goods.goods_state
      }
      // 保存到本地
      this.commit('m_cart/saveToStorage')
      // console.log(JSON.stringify(state.cart))
    },
    // 更新购物车中的商品数量
    updateGoodsCount(state, goods) {
      // 查找对应商品，并更新商品的数量
      const result = state.cart.find(item => item.goods_id === goods.goods_id)
      if(result){
        result.goods_count = goods.goods_count
      }
      // 保存到本地
      this.commit('m_cart/saveToStorage')
      // console.log(JSON.stringify(state.cart))
    },
    // 更新购物车中的商品全部选中状态
    updateGoodsAllState(state, checked) {
      // 更新所有商品选中状态
      state.cart.forEach(item => item.goods_state = checked)
      // 保存到本地
      this.commit('m_cart/saveToStorage')
      // console.log(JSON.stringify(state.cart))
    },
    
    
    // 保存数据到本地
    saveToStorage(state){
      uni.setStorageSync('cart', JSON.stringify(state.cart))
    }
    
  },
  // getters
  getters:{
    // 购物车商品数量
    total(state){
      return state.cart.reduce((acc, curr) => acc+curr.goods_count , 0)
    },
    // 商品是否全选
    isAllChecked(state){
      return state.cart.every(item => item.goods_state)
    },
    // 商品结算数量
    goodsCheckedAmount(state){
      return state.cart.filter(item => item.goods_state)
                       .reduce((total, item) => total+item.goods_count , 0)
    },
    // 商品总价格
    goodsCheckedPrice(state){
      return state.cart.filter(item => item.goods_state)
                       .reduce((totalPrice, item) => totalPrice+item.goods_count*item.goods_price , 0)
                       .toFixed(2)
    }
    
  }
  
}